package com.xszx.dao;

import com.xszx.entity.GoodInOutInfo;
import com.xszx.entity.Goods;
import com.xszx.entity.Position;
import com.xszx.entity.WarehouseRegionInfo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

@Mapper
public interface GoodDao {
    //入库
    public int InWarehouse(GoodInOutInfo goodInOutInfo);

    //查看指定仓库指定的区域面积是否足够入库
    int isInWarehouse(GoodInOutInfo goodInOutInfo);

    //入库后更新区域可用面积
    void subArea(GoodInOutInfo goodInOutInfo);

    List<GoodInOutInfo> getInWarehouseRecord();

    //入库的时候，入库记录表添加记录
    void addInMid(GoodInOutInfo goodInOutInfo);

    //出库
    int outWarehouse(@Param("gid") String gid, @Param("num") Integer num);

    String getCodeById(String gid);

    //获得这一批次的货物存放在哪个仓库
    String getWidByGcode(String code);

    //获得这一批次的货物放在哪个区域
    String getGNumberBycode(String code);

    //往中间表中添加出库记录
    void addOutMid(@Param("wid") String wid, @Param("rnumber") String number,@Param("gbatch") String code, @Param("time") String time, @Param("num") Integer num);

    //获取出库记录
    List<GoodInOutInfo> getOutWarehouseRecord();

    //查询单个货物的面积
    Integer getAreaByGid(String gid);

    //出库完成后增加面积
    void addArea(@Param("wid")String wid,@Param("number")String number,@Param("area")Integer area);

    //判断仓库是否是空的
    Integer isEmpty(Integer wid);
    //通过货物批次号查询货物
    List<Goods> getGoodsByCode(String gbatch);
    //通过区域的id获取区域信息
    WarehouseRegionInfo getRegionById(Integer id);
    //修改入库后的货物信息（入库数量和货物状态）
    void updateGoods(@Param("code") String gbatch,@Param("num") Integer gnum);
    //只修改入库后货物的入库数量
    void updateGoodsByInitNum(@Param("code") String gbatch, @Param("num") int i);
    //修改区域类型的可用面积
    void updapeSpace(@Param("id") Integer id,@Param("gcode") String gcode);

    void updapeSpac(@Param("id") Integer id,@Param("i") int i,@Param("gcode") String gcode);
    //货物超过存货时间，将货物状态改为逾期
    void updateGoodsState(@Param("code") String gbatch,@Param("state") String state);
    //去查这批货放在哪个区域类型里
    List<Position> getPositionList(String code);
   //把区域类型里的空间完全释放
    void releasePosition(@Param("id") Integer id,@Param("area") Integer area);
    //把区域类型里的空间部分释放
    void increasePositionSpace(@Param("id") Integer id,@Param("area") int releasableArea);
    //获取这批货的货物数量
    Integer getGnumByCode(String code);
}
